package fa7.socialcode.web;

import java.text.MessageFormat;
import java.util.ResourceBundle;

import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import fa7.socialcode.model.Noticia;
import fa7.socialcode.service.NoticiaManager;

public class NoticiaForm {

	private final Log log = LogFactory.getLog(ExampleForm.class);
	private String id;
	public Noticia noticia = new Noticia();
	public NoticiaManager mgr;

	public void setId(String id) {
		this.id = id;
	}

	public String getId() {
		return id;
	}

	public Noticia getNoticia() {
		return noticia;
	}

	public void setNoticia(Noticia noticia) {
		this.noticia = noticia;
	}

	public void setNoticiaManager(NoticiaManager noticiaManager) {
		this.mgr = noticiaManager;
	}

	public String edit() {

		if (id != null) {
			// assuming edit
			setNoticia(mgr.findNoticia(id));
		}

		return "success";
	}

	public String save() {
		Noticia not = getNoticia();
		if (not.getId() == 0) {
			not.setId(null);
		}
		mgr.saveNoticia(not);
		addMessage("noticia.saved", getNoticia().getTitulo());

		return "success";
	}

	public String delete() {
		mgr.removeNoticia(getNoticia().getId().toString());
		addMessage("noticia.deleted", getNoticia().getTitulo());

		return "success";
	}

	// Convenience methods ====================================================
	public static String getRequestParameter(String name) {
		return (String) FacesContext.getCurrentInstance().getExternalContext()
				.getRequestParameterMap().get(name);
	}

	public void addMessage(String key, String arg) {
		// sure is a lot of work to get the named ResourceBundle in JSF, eh?
		ApplicationFactory factory = (ApplicationFactory) FactoryFinder
				.getFactory(FactoryFinder.APPLICATION_FACTORY);
		String bundleName = factory.getApplication().getMessageBundle();
		ResourceBundle messages = ResourceBundle.getBundle(bundleName);

		// it's even more work to format a message with args
		MessageFormat form = new MessageFormat(messages.getString(key));

		String msg = form.format(new Object[] { arg });

		// add message to session so it can live past redirects
		// the MessageFilter class will take care of removing it
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(true);
		session.setAttribute("message", msg);
	}
}
